<?php
/*  
 * This is demo how to use ftp
 * 

$ftp_host     = "174.36.147.194";
$ftp_username = "platform";
$ftp_password = "cj8O82pY4k";

$conn_id    = ftp_connect($ftp_host,21,60) or die("connect ftpserver is fail.");
$ftp_stream = ftp_login($conn_id, $ftp_username, $ftp_password);

$source_file      = "E:/GDP/web/CommonContainer.swf";
$destination_file = "/uploadForGclient/CommonContainer.swf";

$result = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);

ftp_close($conn_id);
*/

class ftp_connect {
	private $ftpUrl  = '174.36.147.194';
	private $ftpUser = 'platform';
	private $ftpPass = 'cj8O82pY4k';
	public  $ftpDir  = '/';
	private $ftpR    = ''; //R ftp资源;
	private $status  = '';

	//R 1:成功;2:无法连接ftp;3:用户错误;
	public  function __construct($ftpUrl="", $ftpUser="", $ftpPass="", $ftpDir="") {
		if($ftpUrl){
			$this->ftpUrl=$ftpUrl;
		}
		if($ftpUser){
			$this->ftpUser=$ftpUser;
		}
		if($ftpPass){
			$this->ftpPass=$ftpPass;
		}
		if($ftpUrl){
			$this->ftpDir=$ftpDir;
		}
		if($this->ftpR = ftp_connect($this->ftpUrl, 21)){
			if(ftp_login($this->ftpR, $this->ftpUser, $this->ftpPass)) {
				if(!empty($this->ftpDir)) {
					ftp_chdir($this->ftpR, $this->ftpDir);
				}
				ftp_pasv($this->ftpR, true);//R 启用被动模式;
				$status = 1;
			}else{
				$status = 3;
			}
		}else{
			$status = 2;
		}
	}
	//R 切换目录;
	function cd($dir) {
		return ftp_chdir($this->ftpR, $dir);
	}
	//R 返回当前路劲;
	function pwd() {
		return ftp_pwd($this->ftpR);
	}
	//R 创建目录
	function mkdir($directory) {
		return ftp_mkdir($this->ftpR,$directory);
	}
	//R 删除目录
	function rmdir($directory) {
		return ftp_rmdir($this->ftpR,$directory);
	}
	//R 上传文件;
	public function put($localFile, $remoteFile = '' ,$remoteDir = '') {
		if ($remoteFile == '') {
			$remoteFile = end(explode('/', $localFile));
		}
		
		$this->make_directory($this->ftpR, $this->ftpDir . $remoteDir);
		
		$res = ftp_nb_put($this->ftpR, $this->ftpDir . $remoteFile, $localFile, FTP_BINARY);
		while ($res == FTP_MOREDATA) {
			$res = ftp_nb_continue($this->ftpR);
		}
		if($res == FTP_FINISHED) {
			return true;
		}elseif($res == FTP_FAILED) {
			return false;
		}
	}
	//R 下载文件;
	function get($remoteFile, $localFile = '') {
		if ($localFile == '') {
	     $localFile = end(explode('/', $remoteFile));
	   }
	   if (ftp_get($this->ftpR, $localFile, $remoteFile, FTP_BINARY)) {
	     $flag = true;
	   } else {
	     $flag = false;
	   }
	   return $flag;
	}
	//R 文件大小;
	function size($file) {
	   return ftp_size($this->ftpR, $file);
	}
	//R 文件是否存在;
	function isFile($file) {
	   if ($this->size($file) >= 0) {
	     return true;
	   } else {
	     return false;
	   }
	}
	//R 文件时间
	function fileTime($file) {
	   return ftp_mdtm($this->ftpR, $file);
	}
	//R 删除文件;
	function unlink($file) {
	   return ftp_delete($this->ftpR, $file);
	}
	function nlist($dir = '/service/resource/') {
	   return ftp_nlist($this->ftpR, $dir);
	}
	//R 关闭连接;
	function bye() {
	   return ftp_close($this->ftpR);
	}
	
	// recursive make directory function for ftp
	function make_directory($ftp_stream, $dir)
	{
	    // if directory already exists or can be immediately created return true
	    if ($this->ftp_is_dir($ftp_stream, $dir) || @ftp_mkdir($ftp_stream, $dir)) {
	    	return true;
	    }
	    // otherwise recursively try to make the directory
	    if (!$this->make_directory($ftp_stream, dirname($dir))){
	    	return false;
	    }
	  
	    // final step to create the directory
	    return ftp_mkdir($ftp_stream, $dir);
	}
	 
	function ftp_is_dir($ftp_stream, $dir)
	{
	   // get current directory
	   $original_directory = ftp_pwd($ftp_stream);
	   // test if you can change directory to $dir
	   // suppress errors in case $dir is not a file or not a directory
	   if ( @ftp_chdir( $ftp_stream, $dir ) ) {
	       // If it is a directory, then change the directory back to the original directory
	       ftp_chdir( $ftp_stream, $original_directory );
	       return true;
	   } else {
	       return false;
	   }
	}
}
?>
